Aunque el álgebra relacional es un lenguaje potente que nos proporciona la posibilidad de especificar las operaciones de forma precisa, es necesario contar con un lenguaje más sencillo para el usuario. Este lenguaje será SQL.
Los componentes del SQL son los siguientes:
| (Data Definition Languaje, DDL por sus siglas en inglés), para la definición de relación, borrado de relaciones y modificación de los esquemas de relación. | |
| (Data Manipularion Languaje, DML por sus siglas en inglés). El DML de SQL incluye un lenguaje de consultas basado en el álgebra relacional y el cálculo relacional, que permite insertar, borrar y modificar tuplas. | |
| El DDL de SQL presenta una serie de comandos para especificar las limitaciones de integridad. Las actualizaciones que violan las restricciones de integridad se rechazan. | |
| El DDL de SQL permite crear vistas sobre sus relaciones. | |
| SQL incluye comandos para especificar el comienzo y el final de la transacciones. | |
| Incluye comandos para poder incluir instrucciones SQL en lenguajes de programación de propósito general como C, C++, Java, PL/I, Cbol, Pascal y Fortran. | |
| El DDL de SQL tiene una serie de comandos para deginir los derechos de acceso a las relaciones y a las vistas. |
Lenguaje de definición de datos (DDL):Definición y modificación de esquemas de la relación, borrado de relaciones
Integridad (parte del DDL): Especificar restricciones de integridad para los datos y Actualizaciones que no cumplen restricciones se rechazan.
Lenguaje interactivo de manipulación de datos (DML): Seleccionar, insertar, borrar y modificar tuplas.
El DDL de SQL permite especificar las relaciones de las bases de datos, así como información relativa a estas, incluyendo:
El esquema de cada relación.
El dominio de los valores para cada atributo.
Las restricciones de integridad.
El grupo de índices que se mantiene para cada relación.
Información de seguridad y de autorización de cada relación.
La estructura de almacenamiento físico de cada relación.
La norma SQL soporta gran variedad de tipos de dominio predefinidos, entre ellos:
char(n): determina una cadena de caracteres de longitud fija, de tamaño n, especificada por el usuario.
varchar(n): determina una cadena de caracteres de longitud máxima n, especificada por el usuario.
int: representa un entero, cuyo conjunto de valores concreto depende de la máquina.
smallint: representa un entero pequeño, cuyo conjunto concreto de valores depende de la máquina.
float(n): presenta una precisión de, al menos, n dígitos.
Para crear relaciones, se utiliza el comando CREATE TABLE.
xxxxxxxxxx41CREATE TABLE cliente2(nombre_cliente char(20),3calle_cliente char(30),4ciudad_cliente char(30));
Para introducir la clave primaria dentro de una tabla lo hacemos con el comando PRIMARY KEY.
xxxxxxxxxx51CREATE TABLE cliente2(nombre_cliente char(20),3calle_cliente char(30),4ciudad_cliente char(30),5PRIMARY KEY (nombre_cliente));
Cuando se crean las relaciones, inicialmente están vacías. Para poder añadir datos a la relación se utiliza el comando INSERT, dando los valores de cada atributo en el mismo orden en el que están definidos en el esquema.
Añadir una cuenta C-0001 en la sucursal del centro con un saldo de 1300 euros:
xxxxxxxxxx21INSERT into cuenta values2("C-0001","Centro", 1300);
También podemos especificar a qué atributos queremos asignarles valor.
Cuando usamos esta opción, tenemos que asegurarnos de que los atributos que no asignamos admitan valores nulos; en otro caso, se producirá un error.
xxxxxxxxxx21INSERT into cuenta(numero_cuenta, nombre_sucursal, saldo) values2("C-0001","Centro", 1300);
Para borrar tuplas se utiliza el comando DELETE.
Si lo aplicamos sobre una relación, borrará todas las tuplas de esta.
Borrar todas las tuplas de la tabla cuenta:
xxxxxxxxxx11DELETE FROM cuenta;
El hecho de borrar todas las tuplas no implica que la relación desaparezca, sino que queda vacía.
Para borrar una tabla de la BD se utiliza el comando DROP TABLE.
Cuando aplicamos esta sentencia eliminamos tanto las tuplas como la propia tabla.
Eliminar la tabla cuenta:
xxxxxxxxxx11DROP TABLE cuenta;
Para modificar la estructura inicial de una tabla se utiliza el comando ALTER TABLE.
Renombrar la tabla cliente a usuario:
xxxxxxxxxx21ALTER TABLE cliente2rename to usuario;
Cambiar el nombre de un atributo: Cambia el nombre del atributo nombre_sucursal a sucursal de la tabla cuenta.
xxxxxxxxxx21alter table cuenta2rename column nombre_sucursal to sucursal;
Agregar atributos a una tabla: Agrega la columna edad a la tabla cliente.
xxxxxxxxxx21ALTER TABLE cliente2ADD edad VARCHAR(20);
Eliminar atributos de una tabla: Elimina la columna edad de la tabla cliente.
xxxxxxxxxx21ALTER TABLE cliente2drop edad;
El lenguaje SQL permite el uso de valores nulos para representar valores desconocidos o inexistentes, pero también deja al usuario definir que los atributos no permitan valores nulos. La estructura básica de una expresión SQL comprende tres cláusulas, que son SELECT, FROM y WHERE.
Si no se introduce se considera como cierto. |
Ejemplos SELECT :
Obtener los nombres de las sucursales de la relación prestamo:
xxxxxxxxxx21SELECT nombre_sucursal2FROM prestamo;
Si no queremos que los valores aparezcan duplicados, utilizamos la palabra distinct justo después de SELECT.
xxxxxxxxxx21SELECT distinct nombre_sucursal2FROM prestamo;
Para definir de una manera explícita que no se eliminen los duplicados utilizamos la palabra all.
xxxxxxxxxx21SELECT all nombre_sucursal2FROM prestamo;
Para denotar «todos los atributos» se utiliza el símbolo llamado asterisco, ( * ).
xxxxxxxxxx21SELECT *2FROM prestamo;
En la cláusula SELECT se puede incluir también expresiones aritméticas: +, -, * y /, que operen sobre constantes o atributos de las tuplas.
xxxxxxxxxx21SELECT numero_prestamo, nombre_sucursal, importe * 1002FROM prestamo;Nos devolverá la tabla con los atributos seleccionados en SELECT, pero con el importe multiplicado por 100.
Ejemplos WHERE :
Obtener todos los préstamos concedidos en la sucursal del centro cuyo importe supere los 2000 euros:
xxxxxxxxxx31SELECT numero_prestamo2FROM prestamo3WHERE nombre_sucursal = "Centro" and importe > 2000;
Si queremos simplificar las condiciones que se establezcan en función de rangos utilizaremos el comparador between:
Seleccionar los préstamos con importe entre 80 000 € y 90 000 €:
xxxxxxxxxx31SELECT numero_prestamo2FROM prestamo3WHERE importe between 80000 and 90000;
en vez de:
xxxxxxxxxx31SELECT numero_prestamo2FROM prestamo3WHERE importe>=80000 and importe<=90000
También se puede usar el operador de comparación not between para especificar condiciones fuera de un rango.
xxxxxxxxxx31SELECT numero_prestamo2FROM prestamo3WHERE importe not between 80000 and 90000;
Si no queremos obtener duplicados en una consulta, podemos usar DISTINCT, esto realizará la consulta y eliminará los duplicados.
DISTINCT omite los registros cuyos campos seleccionados coincidan totalmente.
Ejemplos DISTINCT** :
Obtener todos los clientes que tengan un préstamo:
xxxxxxxxxx21SELECT DISTINCT nombre_cliente2FROM prestamo;Esta cláusula devolverá todos los clientes que tengan un préstamo sin estar duplicados. Imagina que Juan tiene dos prestamos, uno para el coche y otro para una casa; con la clausula distinct, solo se devolverá el nombre una sola vez.
La sentencia UPDATE modifica los registros de una tabla, asignando a una o más columnas un valor distinto. La sentencia actuará en todas las filas a no ser que se utilice una cláusula WHERE.
xxxxxxxxxx31UPDATE nombreTabla2SET nombreColumna = expresión3WHERE condición de selección
Actualizar el saldo de todas las cuentas de clientes VIP, aumentando un 10%:
xxxxxxxxxx51UPDATE cuenta, impositor, cliente2SET saldo = saldo * 1.13WHERE cuenta.idCuenta = impositor.idCuenta AND4 cliente.idCli = impositor.idCli AND5 cliente.tipo = "VIP";
Se pueden renombrar las relaciones y los atributos utilizando la cláusula as:
xxxxxxxxxx11nombre_antiguo as nombre_nuevoEsta cláusula puede aparecer tanto en el SELECT como en el FROM.
Usando el renombramiento podemos mostrar otros valores más amigables en los nombres de las columnas.
xxxxxxxxxx31SELECT nombre_cliente as Cliente, numero_prestamo as idPrestamo, importe2FROM prestatario, prestamo3WHERE prestatario.numero_prestamo = prestamo.numero_prestamo;Esta consulta devolverá una tabla cuyas columnas son Cliente, idPrestamo e importe, frente al resultado sin renombramiento, que sería nombre_cliente, numero_prestamo e importe.